#include<bits/stdc++.h>
using namespace std;
int a[10],b[10];
unordered_map<string,int>dist;
unordered_map<string,pair<char,string>>pre;

string start,eend;
queue<string>q;

string get(string s,int op)
{
    string ret;
    if(op==0)ret={s[4],s[5],s[6],s[7],s[0],s[1],s[2],s[3]};
    if(op==1)ret={s[3],s[0],s[1],s[2],s[7],s[4],s[5],s[6]};
    if(op==2)ret={s[0],s[5],s[1],s[3],s[4],s[6],s[2],s[7]};
    return ret;
}

void bfs()
{
    q.push(start);
    dist[start]=0;
    
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        if(t==eend)return;
        for(int i=0;i<3;i++)
        {
            string s=get(t,i);
            if(dist.count(s)==0)
            {
                dist[s]=dist[t]+1;
                pre[s]={char('A'+i),t};
                if(s==eend)return ;
                q.push(s);
            }
        }
    }
}

int main()
{
    for(int i=0;i<8;i++)cin>>a[i];
    for(int i=0;i<4;i++)eend+=char(a[i]+'0');
    for(int i=7;i>=4;i--)eend+=char(a[i]+'0');
    start="12348765";
    bfs();
    cout<<dist[eend]<<endl;
    string ans;
    while(eend!=start)
    {
        ans+=pre[eend].first;
        eend=pre[eend].second;
    }
    reverse(ans.begin(),ans.end());
    if(ans.size())cout<<ans;
    return 0;
}
